iT邦幫忙

2024 iThome 鐵人賽

DAY 30
0
Python

使用 Django 框架和 Wagtail,快速打造一個 CMS 網站系列 第 30

D30 - Wagtail 多國語系設定

  • 分享至 

  • xImage
  •  

Wagtail 的多語言內容處理方式

  • Wagtail 在每個語言區(locale)中存儲一個獨立的頁面樹。
  • 它內建了 Locale 模型,所有頁面通過 locale 外鍵字段與該模型關聯。
  • 它通過 translation_key 字段中的共享 UUID 記錄哪些頁面是彼此的翻譯。
  • 它自動通過站點首頁的翻譯進行路由請求。
  • 它使用 Django 的 i18n_patternsLocaleMiddleware 進行語言檢測。

在 Settings/base.py 啟動 i18n

# mysite/settings/base.py

USE_I18N = True
USE_L10N = True
WAGTAIL_I18N_ENABLED = True

在 settings 開始配置多國語系


from django.utils.translation import gettext_lazy as _

LANGUAGE_CODE = 'en'

LANGUAGES = [
    ('en', _('English')),
    ('zh-hant', _('Traditional Chinese')),
]

WAGTAIL_CONTENT_LANGUAGES = LANGUAGES

讓管理員可以將 admin panel

有一個可選的語言區管理應用,允許 Wagtail 管理員從 Wagtail 管理介面中設置語言區。

要啟用此功能,將 wagtail.locales 添加到 INSTALLED_APPS 中:


# my_project/settings.py

INSTALLED_APPS = [
    # ...
    'wagtail.locales',
    # ...
]

在頁面添加前綴

若要讓所有頁面樹在同一個網域下提供服務,我們需要為每個語言添加一個 URL 前綴。

可以使用 Django 內建的 i18n_patterns 函數來實現,該函數會為傳入的所有 URL 模式添加語言前綴。這樣會根據 URL 中指定的語言代碼激活相應的語言,而 Wagtail 在決定如何路由請求時會考慮這一點。

在專案的 urls.py 中,將 Wagtail 的核心 URL(以及任何你希望翻譯的其他 URL)添加到 i18n_patterns 區塊中:

from django.conf.urls.i18n import i18n_patterns

# 不需要 i18n 的 URL 模式
urlpatterns = [
    path("django-admin/", admin.site.urls),
    path("admin/", include(wagtailadmin_urls)),
    path("documents/", include(wagtaildocs_urls)),
    path("api/", include("api.urls")),
    path("api/v2/", api_router.urls),
]

# 需要 i18n 的 URL 模式
urlpatterns += i18n_patterns(
    path("search/", search_views.search, name="search"),
    re_path(r"", include(wagtail_urls)),
    prefix_default_language=True,
)

增加 locale 資料夾

先進入和 manage.py 同一層,然後下

# 創造 locale folder
mkdir locale 

在 settings/base.py 加上 LOCALE_PATH

LOCALE_PATHS = [
    os.path.join(BASE_DIR, 'locale'),
]

在 terminal 下

django-admin makemessages -l zh_Hant

這時候,locale folder 會生出

django.po 檔案

在這裡面就可以對應不同的語系進行語言的翻譯


#: mysite/settings/base.py:142
msgid "English"
msgstr "English"

#: mysite/settings/base.py:143
msgid "Traditional Chinese"
msgstr "繁體中文"

#: mysite/templates/includes/header.html:3
msgid "Skip to content"
msgstr "跳過內容"

#: mysite/templates/includes/header.html:13
msgid "Search"
msgstr "搜尋"

更改完成後,指用指令 compilemessages

   python manage.py compilemessages

如果你的 default 語言選擇繁體中文,那 admin panel 的界面,也會變成繁體中文

https://ithelp.ithome.com.tw/upload/images/20241012/20140622oYOCVPzfQA.png


上一篇
D29 - 使用Django admin 後台
系列文
使用 Django 框架和 Wagtail,快速打造一個 CMS 網站30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言